Cargo tidyverse y plotly, las librerías que vamos a usar en este módulo
library(tidyverse)
library(plotly)
Cargo los datos de los jugadores de la Superliga Argentina
jugadores <- read_csv('https://raw.githubusercontent.com/martoalalu/futbol-data-science/master/data/jugadores_superliga.csv')
Hago la exploración y preparación de datos inicial
#Veo los nombres de los jugadores
unique(jugadores$player)
## [1] "C. Fara" "E. Iñíguez" "F. Andrada"
## [4] "F. Assmann" "F. Bertoglio" "F. Gino"
## [7] "F. Grahl" "F. Pérez" "F. Tobares"
## [10] "J. Indacoechea" "L. Di Yorio" "L. Galeano"
## [13] "L. Pocrnjic" "L. Villalba" "M. Capasso"
## [16] "M. López" "M. Miers" "N. Yeri"
## [19] "P. Becker" "R. Contreras" "R. Martínez"
## [22] "Y. Juárez" "A. Aleo" "A. Barquett"
## [25] "A. Benítez" "A. Falabella" "C. Quintana"
## [28] "D. Batallini" "D. Sosa" "E. Gómez"
## [31] "E. López" "E. Ybañez" "F. González"
## [34] "F. Ibarra" "F. Ilarregui" "F. Mac Allister"
## [37] "F. Montero" "F. Vera" "G. Florentín"
## [40] "G. Hauche" "G. Verón" "I. Colman"
## [43] "J. Sandoval" "K. Mac Allister" "L. Ambrogio"
## [46] "L. Cháves" "L. Mosevich" "M. Angeleri"
## [49] "M. Caruzzo" "M. Centurión" "M. Coronel"
## [52] "M. Miljevic" "M. Romero" "M. Torrén"
## [55] "N. Forastiero" "N. Silva" "S. Silva"
## [58] "T. Amilivia" "T. Andrade" "A. Antilef"
## [61] "D. Núñez" "E. Cérica" "E. Méndez"
## [64] "E. Papa" "E. Rescaldani" "F. Pereyra"
## [67] "F. Pons" "F. Sbuttoni" "F. Torrent"
## [70] "J. Candia" "J. García" "J. Kaprof"
## [73] "J. Soñora" "J. Soraire" "L. Necul"
## [76] "L. Picco" "M. Abreliano" "M. Carabajal"
## [79] "M. Gagliardo" "R. Zamponi" "A. Lagos"
## [82] "A. Lotti" "A. Rojas" "A. Sánchez"
## [85] "C. Albornoz" "C. Erbes" "C. Lucchetti"
## [88] "D. Gissi" "F. Bravo" "F. Monzón"
## [91] "F. Pizzicanella" "G. Acosta" "G. Ortíz"
## [94] "G. Risso" "G. Toledo" "J. Fernández"
## [97] "J. Romero" "J. Toledo" "K. Isa Luna"
## [100] "L. Díaz" "L. Heredia" "L. Melano"
## [103] "M. Alustiza" "M. Ortiz" "M. Osores"
## [106] "N. Aguirre" "R. Carrera" "Y. Cabral"
## [109] "A. Fontana" "A. Maldonado" "A. Sosa"
## [112] "A. Urzi" "C. Bravo" "D. Osvaldo"
## [115] "E. Conde" "E. Coronel" "F. Altamirano"
## [118] "F. Cambeses" "F. Quinteros" "G. Galoppo"
## [121] "J. Álvarez" "J. Dátolo" "J. Gutiérrez"
## [124] "J. Rodriguez" "L. Gómez" "M. Arboleda"
## [127] "M. Payero" "N. Bertolo" "N. Leyes"
## [130] "N. Linares" "P. Velázquez" "R. Arciero"
## [133] "R. Civelli" "R. Lenis" "S. Benega"
## [136] "S. Dubarbier" "A. Almendra" "A. Heredia"
## [139] "A. Obando" "A. Rossi" "C. Izquierdoz"
## [142] "C. Tévez" "C. Zambrano" "E. Andrada"
## [145] "E. Más" "E. Reynoso" "E. Salvio"
## [148] "F. Fabra" "F. Soldano" "G. Ávila"
## [151] "G. Fernández" "I. Marcone" "J. Buffarini"
## [154] "J. Campuzano" "J. Chicco" "J. Hurtado"
## [157] "L. Jara" "L. Laborda" "L. López"
## [160] "M. Díaz" "M. Roffo" "M. Weigandt"
## [163] "M. Zárate" "N. Capaldo" "N. Solís"
## [166] "R. Ábila" "S. Pérez" "S. Villa"
## [169] "W. Bou" "C. Díaz" "C. Vega"
## [172] "D. Cure" "D. Rodríguez" "E. Romero"
## [175] "F. Cristaldo" "G. Núñez" "H. Vera"
## [178] "I. Quílez" "J. Bay" "J. Galeano"
## [181] "J. Galván" "L. Alzugaray" "L. Caffaratti"
## [184] "M. Barraza" "M. Cavallotti" "M. Montenegro"
## [187] "M. Pato" "M. Sánchez" "N. Miracco"
## [190] "O. Salomón" "P. Argañaraz" "S. Gallucci"
## [193] "A. Doffo" "A. Vigo" "B. Bianchi"
## [196] "B. Farioli" "B. Fernández" "B. Galván"
## [199] "C. Bernardi" "E. Olivera" "F. Farías"
## [202] "F. Lértora" "G. Díaz" "G. Escobar"
## [205] "G. Esparza" "I. Chicco" "J. Zurbriggen"
## [208] "L. Burián" "L. Rodríguez" "L. Viatri"
## [211] "M. Fritzler" "M. Hernández" "N. Leguizamón"
## [214] "R. Aliendro" "R. Delgado" "R. García"
## [217] "S. Pierotti" "T. Chancalay" "T. Moschión"
## [220] "T. Sandoval" "W. Morelo" "Á. Gonzalez"
## [223] "C. Lattanzio" "D. García" "D. Sappa"
## [226] "D. Sarmiento" "E. Kalinski" "F. Apaolaza"
## [229] "F. Mura" "F. Sánchez" "F. Sivetti"
## [232] "F. Zuqui" "G. Gil Romero" "I. Erquiaga"
## [235] "I. Gómez" "J. Fuentes" "J. Mascherano"
## [238] "J. Pourtau" "J. Schunke" "L. Luna"
## [241] "M. Andújar" "M. Ayala" "M. Castro"
## [244] "M. Cauteruccio" "M. Rosales" "M. Ruiz Díaz"
## [247] "N. Bazzana" "N. Colombo" "N. Estévez"
## [250] "B. Alemán" "E. Ramírez" "F. Mussis"
## [253] "G. Guiffrey" "G. Simeone" "H. Mancilla"
## [256] "H. Tijanovich" "J. Agudelo" "J. Broun"
## [259] "J. Paradela" "J. Vargas" "K. Caraballo"
## [262] "L. Barrios" "L. Chávez" "L. Licht"
## [265] "L. Morales" "M. Caire" "M. Comba"
## [268] "M. Cuadra" "M. García" "M. Gómez"
## [271] "M. Guanini" "M. Melluso" "M. Miranda"
## [274] "M. Pérez García" "N. Contín" "N. Insfrán"
## [277] "P. Goltz" "P. Monti" "S. Cocimano"
## [280] "T. Durso" "V. Ayala" "A. Álvarez"
## [283] "A. Manzur" "C. Almeida" "D. Ortiz"
## [286] "E. Bullaude" "F. Henríquez" "G. Alanís"
## [289] "G. Carrasco" "G. Ferrari" "J. Andrada"
## [292] "J. Ayoví" "J. Bolado" "J. Brunetta"
## [295] "J. Varela" "L. Pizarro" "L. Vella"
## [298] "M. Freites" "M. Herrera" "M. Merentiel"
## [301] "M. Rouzies" "R. Ramírez" "S. García"
## [304] "S. Lomónaco" "T. Badaloni" "T. Cardona"
## [307] "V. Burgoa" "V. Ramis" "W. Cartagena"
## [310] "Z. Romero" "A. Calello" "A. Casco"
## [313] "A. Chávez" "A. Curruhinca" "A. Silva"
## [316] "B. Maidana" "C. Araujo" "C. Ibáñez"
## [319] "D. Mendoza" "F. Coniglio" "F. Cosciuc"
## [322] "G. Bettini" "J. Garro" "J. Vieyra"
## [325] "L. Grimi" "L. Merolla" "M. Bogado"
## [328] "N. Briasco" "N. Cordero" "N. Romat"
## [331] "R. Cabral" "S. Hezze" "S. Navarro"
## [334] "S. Ramírez" "S. Salcedo" "A. Barboza"
## [337] "A. Franco" "A. Roa" "A. Soñora"
## [340] "A. Velasco" "B. Martinez" "B. Romero"
## [343] "C. Benavidez" "C. Chávez" "C. Domínguez"
## [346] "D. Blanco" "D. Mercado" "E. Denis"
## [349] "E. Mercado" "F. Bustos" "F. Gaibor"
## [352] "G. Asis" "G. Silva" "G. Togni"
## [355] "J. Di Lorenzo" "J. Sánchez Miño" "L. Fernández"
## [358] "L. González" "L. Romero" "M. Álvarez"
## [361] "M. Campaña" "M. Del Castillo" "P. Hernández"
## [364] "R. Bacchia" "S. Barreto" "S. Romero"
## [367] "T. Ortega" "A. Bernabei" "E. Muñoz"
## [370] "F. Barrientos" "F. Belluschi" "F. Quignón"
## [373] "G. Burdisso" "G. Sara" "J. Gómez"
## [376] "J. Martínez" "J. Sand" "J. Sinisterra"
## [379] "L. Acosta" "L. Di Plácido" "L. Maciel"
## [382] "L. Valenti" "L. Vera" "M. Astina"
## [385] "M. Esquivel" "M. Ibáñez" "M. Moreno"
## [388] "M. Pérez" "M. Vera" "N. Avellaneda"
## [391] "N. Morgantini" "N. Orsini" "N. Pasquini"
## [394] "N. Thaller" "P. De la Vega" "P. Martínez"
## [397] "T. Belmonte" "A. Aguerre" "Á. Gabrielli"
## [400] "A. Moreno" "A. Rodríguez" "B. Rivero"
## [403] "C. Insaurralde" "E. Cabrera" "F. Fontanini"
## [406] "F. Nadalín" "I. Scocco" "J. Cacciabue"
## [409] "L. Albertengo" "L. Ferroni" "Luís Leal"
## [412] "M. Bíttolo" "M. Fórmica" "Maxi Rodríguez"
## [415] "N. Castro" "N. Ibáñez" "N. Temperini"
## [418] "R. Salinas" "S. Callegari" "S. Gentiletti"
## [421] "S. Palacios" "A. Guiffrey" "A. Sufi"
## [424] "B. Negro" "B. Nievas" "B. Urribarri"
## [427] "C. Chimino" "C. Tarragona" "D. Lemos"
## [430] "D. Miloc" "F. Costa" "F. Dettler"
## [433] "F. Luna" "F. Mancinelli" "G. Ávalos"
## [436] "G. Compagnucci" "H. Silveira" "J. Barreto"
## [439] "J. Franzoni" "J. Galetto" "L. Comas"
## [442] "L. Marín" "M. Abero" "M. Aruga"
## [445] "M. Escudero" "O. Benítez" "P. Cortizo"
## [448] "S. Briñone" "W. Andrade" "A. Solari"
## [451] "A. Soto" "B. Garré" "C. Alcaraz"
## [454] "D. Barbona" "D. Cvitanich" "D. González"
## [457] "E. Cardozo" "E. Mena" "F. Zaracho"
## [460] "G. Arias" "G. Gómez" "G. Piovi"
## [463] "H. Fértoli" "I. Maggi" "I. Pillud"
## [466] "J. Caceres" "J. Cristaldo" "J. López"
## [469] "J. Patiño" "L. Andrada" "L. Bareiro"
## [472] "L. Miranda" "L. Orbán" "L. Sigali"
## [475] "M. Martínez" "M. Meli" "M. Ojeda"
## [478] "M. Rojas" "N. Domínguez" "N. Oroz"
## [481] "N. Reniero" "R. Centurión" "S. Rosales"
## [484] "T. Banega" "W. Montoya" "B. Rollheiser"
## [487] "B. Zuculini" "C. Auzqui" "C. Ferreira"
## [490] "E. Bologna" "E. Pérez" "F. Angileri"
## [493] "F. Armani" "F. Paredes" "G. Lux"
## [496] "G. Montiel" "H. Martínez" "I. Fernández"
## [499] "I. Rossi" "J. Arzura" "J. Carrascal"
## [502] "J. Moreira" "J. Pinola" "J. Quintero"
## [505] "L. Beltran" "L. Lollo" "L. Martínez Quarta"
## [508] "L. Ponzio" "L. Pratto" "M. Casco"
## [511] "M. Moya" "M. Suárez" "N. De La Cruz"
## [514] "P. Díaz" "R. Borré" "R. Rojas"
## [517] "S. Sosa" "A. Marinelli" "C. González"
## [520] "C. Riaño" "C. Rius" "D. Becker"
## [523] "D. Martínez" "D. Novaretti" "D. Vergara"
## [526] "D. Zabala" "E. Brítez" "E. Ojeda"
## [529] "F. Almada" "F. Lo Celso" "F. Martínez"
## [532] "F. Rinaudo" "J. Ayala" "J. Laso"
## [535] "J. Ledesma" "J. Mazzaco" "J. Pereyra"
## [538] "K. Gutiérrez" "L. Gamba" "L. Rivas"
## [541] "M. Miño" "M. Rubén" "N. Colazo"
## [544] "R. González" "R. Villagra" "S. Ribas"
## [547] "A. Díaz" "A. Donatti" "A. Gaich"
## [550] "A. Hausch" "A. Martegani" "Á. Romero"
## [553] "B. Pittón" "E. Cerutti" "E. Pereyra"
## [556] "F. Coloccini" "F. Flores" "F. Monetti"
## [559] "F. Moyano" "G. Gudiño" "G. Hernández"
## [562] "G. Peralta" "G. Peruzzi" "G. Poblete"
## [565] "G. Rojas" "I. Piatti" "J. Acevedo"
## [568] "J. Palacios" "J. Ramírez" "L. Menossi"
## [571] "L. Sequeira" "M. Palacios" "M. Peralta"
## [574] "N. Fernández" "N. Navarro" "Ó. Romero"
## [577] "R. Arias" "R. Loaiza" "S. Torrico"
## [580] "S. Vergini" "V. Salazar" "A. Araujo"
## [583] "A. Cubas" "A. Schott" "B. Guzmán"
## [586] "D. Moreno" "D. Valoyes" "E. Díaz"
## [589] "F. Bersano" "F. Cabral" "F. Fragapane"
## [592] "F. Navarro" "G. Herrera" "Guilherme Parede"
## [595] "I. Escobar" "J. Arias" "J. Blázquez"
## [598] "J. Gandolfi" "J. Komar" "J. Méndez"
## [601] "J. Menéndez" "L. Godoy" "M. Caranta"
## [604] "N. Bustos" "N. Giménez" "N. Tenaglia"
## [607] "R. Paparelli" "R. Pérez" "T. Pochettino"
## [610] "A. Pussetto" "B. Blasi" "C. Corvalán"
## [613] "E. Bonifacio" "E. Cecchini" "F. Calderón"
## [616] "F. Elizari" "F. Gerometta" "F. Godoy"
## [619] "F. Milo" "F. Troyansky" "G. Carabajal"
## [622] "G. Comas" "G. González" "J. Bottinelli"
## [625] "J. Cabrera" "J. Nardoni" "J. Zules"
## [628] "L. Ríos" "M. Cañete" "M. Luna Diale"
## [631] "M. Peano" "N. Mazzola" "S. Assis"
## [634] "S. Moyano" "Á. Barreal" "A. Bouzat"
## [637] "A. Domínguez" "A. Montero" "B. Cufré"
## [640] "C. Núñez" "D. Fernández" "E. Amor"
## [643] "E. Bogado" "F. Alvarenga" "F. Gago"
## [646] "F. Ortega" "G. Mainero" "H. De La Fuente"
## [649] "J. Ramis" "L. Abram" "L. Giannetti"
## [652] "L. Hoyos" "L. Janson" "L. Orellano"
## [655] "L. Robertone" "M. Brizuela" "M. Pittón"
## [658] "N. Delgadillo" "P. Galdames" "R. Álvarez"
## [661] "R. Ríos" "T. Almada" "T. Guidara"
## [664] "T. Zárate"
#Filtro el dataset por José Sand y luego genero variables que calculen diferentes métricas no existentes en el dataset
sand <- jugadores %>% filter(player=="J. Sand") %>% mutate(prop_acc_exitosas=sum(total_actions_successful)/sum(total_actions)*100, prop_tiros_arco=sum(shots_on_target)/sum(total_shots)*100,
acierto_pase=sum(passes_accurate)/sum(total_passes)*100,
prop_duels_won=sum(duels_won)/sum(total_duels)*100,
prop_def_duels_won=sum(defensive_duels_won)/sum(total_defensive_duels)*100,
prop_att_duels_won=sum(offensive_duels_won)/sum(total_offensive_duels)*100)
#Luego me quedo con el primer registro y sólo las variables que yo cree, que se repiten cada registro
sand <- sand[1,c('prop_acc_exitosas', 'prop_tiros_arco', 'acierto_pase', 'prop_duels_won', 'prop_def_duels_won', 'prop_att_duels_won')]
#Repito la misma acción para Ramón Ábila
abila <- jugadores %>% filter(player=="R. Ábila") %>% mutate(prop_acc_exitosas=sum(total_actions_successful)/sum(total_actions)*100, prop_tiros_arco=sum(shots_on_target)/sum(total_shots)*100,
acierto_pase=sum(passes_accurate)/sum(total_passes)*100,
prop_duels_won=sum(duels_won)/sum(total_duels)*100,
prop_def_duels_won=sum(defensive_duels_won)/sum(total_defensive_duels)*100,
prop_att_duels_won=sum(offensive_duels_won)/sum(total_offensive_duels)*100)
abila <- abila[1,c('prop_acc_exitosas', 'prop_tiros_arco', 'acierto_pase', 'prop_duels_won', 'prop_def_duels_won', 'prop_att_duels_won')]
#Uno ambos datasets
data <- rbind(sand, abila)
data
#Le asigno nombres a los índices
row.names(data) <- c('José Sand', 'Ramon Ábila')
## Warning: Setting row names on a tibble is deprecated.
#Y convierto mis datos a matriz
data <- as.matrix(data)
Genero mi gráfico de a partes
#Guardo mis nombres de atributos y su extensión
Attributes = colnames(data)
AttNo = length(Attributes)
#Genero mi data con un valor final igual para asegurar el círculo
data <- cbind(data, data[,1])
#Seteo el marco con ggplot
ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150))
#Genero una función que me traiga el círculo
circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
r = diameter / 2
tt <- seq(0,2*pi,length.out = npoints)
xx <- center[1] + r * cos(tt)
yy <- center[2] + r * sin(tt)
return(data.frame(x = xx, y = yy))
}
#Genero los círculos que van a dar el radar
circle1 <- circleFun(c(0,0),200,npoints = 100)
circle2 <- circleFun(c(0,0),150,npoints = 100)
circle3 <- circleFun(c(0,0),100,npoints = 100)
circle4 <- circleFun(c(0,0),50,npoints = 100)
## Agrego el background del radar
ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150)) +
## Agrego los círculos
geom_polygon(data = circle1, aes(x=x,y=y),fill = "#F0F0F0", colour = "#969696") + geom_polygon(data = circle2, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") + geom_polygon(data = circle3, aes(x=x,y=y),fill = "#F0F0F0", colour = "#d9d9d9") + geom_polygon(data = circle4, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9")
## Agrego el background
ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150)) +
## Agrego los círculos
geom_polygon(data = circle1, aes(x=x,y=y),fill = "#F0F0F0", colour = "#969696") + geom_polygon(data = circle2, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") + geom_polygon(data = circle3, aes(x=x,y=y),fill = "#F0F0F0", colour = "#d9d9d9") + geom_polygon(data = circle4, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") +
## Agrego un fondo removiendo el predeterminado por ggplot
theme_void()
angle_spilt <- (2*pi) / (AttNo)
angle_spilt_seq <- seq(0,(2*pi),angle_spilt)
angle_spilt_seq
## [1] 0.000000 1.047198 2.094395 3.141593 4.188790 5.235988 6.283185
# Genero dataframes vacíos para albergar mis variables
LineData <- data.frame(x=NA, y=NA, stringsAsFactors = F)
TitlePositioning <- data.frame(title=NA, x=NA, y=NA, stringsAsFactors = F)
## Creo el background donde voy a construir los datos con un for loop
for (i in 1:NCOL(data)) {
angle_multiplier <- if(i < NCOL(data)){i}else{1}
radians_for_segment <- angle_spilt_seq[i]
x <- 100 * cos(radians_for_segment)
y <- 100 * sin(radians_for_segment)
temp <- data.frame(x = x, y = y, stringsAsFactors = F)
LineData <- rbind(temp, LineData)
x <- 112 * cos(radians_for_segment)
y <- 112 * sin(radians_for_segment)
title <- colnames(data)[i]
temp <- data.frame(title = title, x = x, y = y, stringsAsFactors = F)
TitlePositioning <- rbind(temp, TitlePositioning)
}
## Creo las etiquetas de mis datos
values <- c(25,50,75)
radian_for_values <- angle_spilt / 2
x <- values * cos(radian_for_values)
y <- values * sin(radian_for_values)
ValuePositioning <- data.frame(values = values, x = x, y = y, stringsAsFactors = F)
## Agrego valores de origen para las líneas
LineData$x2 <- 0
LineData$y2 <- 0
## Chequeo la data
LineData
TitlePositioning
ValuePositioning
## Agrego el background
ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150)) +
## Agrego los círculos
geom_polygon(data = circle1, aes(x=x,y=y),fill = "#F0F0F0", colour = "#969696") + geom_polygon(data = circle2, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") + geom_polygon(data = circle3, aes(x=x,y=y),fill = "#F0F0F0", colour = "#d9d9d9") + geom_polygon(data = circle4, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") +
## Saco el fondo
theme_void() +
## Agrego líneas y los nombres de los atributos
geom_segment(data=LineData, aes(x = LineData$x, y = LineData$y, xend = LineData$x2, yend = LineData$y2),colour = "#d9d9d9", linetype = "dashed") +
annotate("text", x = TitlePositioning$x , y = TitlePositioning$y, label = TitlePositioning$title, size= 3.5) +
annotate("text", x = ValuePositioning$x , y = ValuePositioning$y, label = ValuePositioning$values, size= 3.5, colour = "#969696")
## Warning: Use of `LineData$x` is discouraged. Use `x` instead.
## Warning: Use of `LineData$y` is discouraged. Use `y` instead.
## Warning: Use of `LineData$x2` is discouraged. Use `x2` instead.
## Warning: Use of `LineData$y2` is discouraged. Use `y2` instead.
## Warning: Removed 1 rows containing missing values (geom_segment).
## Warning: Removed 1 rows containing missing values (geom_text).
# Genero un dataframe vacío para albergar la data
polydata <- data.frame(player=NA, value=NA, radians=NA, x=NA, y=NA, stringsAsFactors = F)
## Creo el polígono para los datos de mis jugadores
for (i in 1:NCOL(data)) {
for (p in 1:NROW(data)) {
player2calc <- data[p,]
angle_multiplier <- if(i < NCOL(data)){i}else{1}
radians_for_segment <- angle_spilt_seq[i]
x <- player2calc[i] * cos(radians_for_segment)
y <- player2calc[i] * sin(radians_for_segment)
player <- rownames(data)[p]
temp <- data.frame(player = player, value = player2calc[i], radians = radians_for_segment, x = x, y = y, stringsAsFactors = F)
polydata <- rbind(temp, polydata)
}
}
head(polydata)
## Separo la data entre jugador 1 y jugador 2
playersDB <- unique(polydata$player)
player1 <- polydata[(polydata$player == playersDB[1]),]
player2 <- polydata[(polydata$player == playersDB[2]),]
## Agrego el background visual
ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150)) +
## Agrego círculos
geom_polygon(data = circle1, aes(x=x,y=y),fill = "#F0F0F0", colour = "#969696") + geom_polygon(data = circle2, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") + geom_polygon(data = circle3, aes(x=x,y=y),fill = "#F0F0F0", colour = "#d9d9d9") + geom_polygon(data = circle4, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") +
## Cambio el tema a vacío (remuevo el default)
theme_void() +
## Agrego los segmentos de líneas y los títulos de atributos y valores
geom_segment(data=LineData, aes(x = LineData$x, y = LineData$y, xend = LineData$x2, yend = LineData$y2),colour = "#d9d9d9", linetype = "dashed") +
annotate("text", x = TitlePositioning$x , y = TitlePositioning$y, label = TitlePositioning$title, size= 3.5) +
annotate("text", x = ValuePositioning$x , y = ValuePositioning$y, label = ValuePositioning$values, size= 3.5, colour = "#969696") +
## Agrego la data del jugador 1
geom_polygon(data = player1, aes(x=x,y=y),fill = "#A30845", colour = "#A30845", alpha = 0.3) + geom_point(data = player1, aes(x = x, y = y),size=0.3, colour= "#A30845")
## Warning: Use of `LineData$x` is discouraged. Use `x` instead.
## Warning: Use of `LineData$y` is discouraged. Use `y` instead.
## Warning: Use of `LineData$x2` is discouraged. Use `x2` instead.
## Warning: Use of `LineData$y2` is discouraged. Use `y2` instead.
## Warning: Removed 1 rows containing missing values (geom_segment).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 1 rows containing missing values (geom_point).
## Creo el string para el jugador 1
Player1_title <- gsub('([[:upper:]])', ' \\1', playersDB[1])
Player1_title <- trimws(Player1_title)
## Agrego el background
ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150)) +
## Agrego círculos
geom_polygon(data = circle1, aes(x=x,y=y),fill = "#F0F0F0", colour = "#969696") + geom_polygon(data = circle2, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") + geom_polygon(data = circle3, aes(x=x,y=y),fill = "#F0F0F0", colour = "#d9d9d9") + geom_polygon(data = circle4, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") +
## Cambio el tema a vacío (remuevo el default)
theme_void() +
## Agrego los segmentos de líneas y los títulos de atributos y valores
geom_segment(data=LineData, aes(x = LineData$x, y = LineData$y, xend = LineData$x2, yend = LineData$y2),colour = "#d9d9d9", linetype = "dashed") +
annotate("text", x = TitlePositioning$x , y = TitlePositioning$y, label = TitlePositioning$title, size= 4.5) +
annotate("text", x = ValuePositioning$x , y = ValuePositioning$y, label = ValuePositioning$values, size= 4.5, colour = "#969696") +
## Agrego la data del jugador 1
geom_polygon(data = player1, aes(x=x,y=y),fill = "#A30845", colour = "#A30845", alpha = 0.3) + geom_point(data = player1, aes(x = x, y = y),size=1, colour= "#A30845") +
## Agrego título
annotate("text", x = -110 , y = 130, label = Player1_title, size= 10, colour = "#A30845", family = "Helvetica", fontface = "bold", hjust = 0) +
annotate("text", x = 110 , y = 130, label = "Superliga Argentina Data", size= 10, colour = "#969696", family = "Helvetica", fontface = "bold", hjust = 1)
## Warning: Use of `LineData$x` is discouraged. Use `x` instead.
## Warning: Use of `LineData$y` is discouraged. Use `y` instead.
## Warning: Use of `LineData$x2` is discouraged. Use `x2` instead.
## Warning: Use of `LineData$y2` is discouraged. Use `y2` instead.
## Warning: Removed 1 rows containing missing values (geom_segment).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 1 rows containing missing values (geom_point).
## Creo string de título para el jugador 2
Player2_title <- gsub('([[:upper:]])', ' \\1', playersDB[2])
Player2_title <- trimws(Player2_title)
## Agrego el background
p <- ggplot() + xlim(c(-120, 120)) + ylim(c(-120, 150)) +
## Agrego círculos
geom_polygon(data = circle1, aes(x=x,y=y),fill = "#F0F0F0", colour = "#969696") + geom_polygon(data = circle2, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") + geom_polygon(data = circle3, aes(x=x,y=y),fill = "#F0F0F0", colour = "#d9d9d9") + geom_polygon(data = circle4, aes(x=x,y=y),fill = "#FFFFFF", colour = "#d9d9d9") +
## Cambio el tema a vacío (remuevo el default)
theme_void() +
## Agrego los segmentos de líneas y los títulos de atributos y valores
geom_segment(data=LineData, aes(x = LineData$x, y = LineData$y, xend = LineData$x2, yend = LineData$y2),colour = "#d9d9d9", linetype = "dashed") +
annotate("text", x = TitlePositioning$x , y = TitlePositioning$y, label = TitlePositioning$title, size= 3.5) +
annotate("text", x = ValuePositioning$x , y = ValuePositioning$y, label = ValuePositioning$values, size= 3.5, colour = "#969696") +
## Agrego la data del jugador 1
geom_polygon(data = player1, aes(x=x,y=y),fill = "#A30845", colour = "#A30845", alpha = 0.3) + geom_point(data = player1, aes(x = x, y = y),size=0.3, colour= "#A30845") +
## Agrego título
annotate("text", x = -110 , y = 130, label = Player1_title, size= 5, colour = "#A30845", family = "Helvetica", fontface = "bold", hjust = 0) +
annotate("text", x = 110 , y = 130, label = "Superliga Argentina Data", size= 4, colour = "#969696", family = "Helvetica", fontface = "bold", hjust = 1) +
## Agrego la data del jugador 2
geom_polygon(data = player2, aes(x=x,y=y),fill = "#00B20B", colour = "#00B20B", alpha = 0.3) +
geom_point(data = player2, aes(x = x, y = y),size=0.3, colour= "#00B20B") +
## Agrego títulos de jugador 2
annotate("text", x = -110 , y = 116, label = Player2_title, size= 5, colour = "#00B20B", family = "Helvetica", fontface = "bold", hjust = 0) +
annotate("text", x = -110 , y = 123 , label = "vrs", size= 3, colour = "#969696", family = "Helvetica", hjust = 0)
p
## Warning: Use of `LineData$x` is discouraged. Use `x` instead.
## Warning: Use of `LineData$y` is discouraged. Use `y` instead.
## Warning: Use of `LineData$x2` is discouraged. Use `x2` instead.
## Warning: Use of `LineData$y2` is discouraged. Use `y2` instead.
## Warning: Removed 1 rows containing missing values (geom_segment).
## Warning: Removed 1 rows containing missing values (geom_text).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).
Puedo darle interactividad a mi gráfico, aunque no es muy vistoso porque mi gráfico tiene varias capas generadas para darle un estilo específico al gráfico
ggplotly(p)
## Warning: Use of `LineData$x` is discouraged. Use `x` instead.
## Warning: Use of `LineData$y` is discouraged. Use `y` instead.
## Warning: Use of `LineData$x2` is discouraged. Use `x2` instead.
## Warning: Use of `LineData$y2` is discouraged. Use `y2` instead.
Probamos con otro gráfico sobre los mismos datos
#Vuelvo a generar los datos de ambos jugadores
data <- rbind(sand, abila)
#Agrego variable con el nombre de los jugadores
data$jugador <- c("José Sand", "Ramon Ábila")
#Uso gather() para acondicionarlos
data_plot <- gather(
data,
key = "variable",
value = "value",
na.rm = FALSE,
convert = FALSE,
factor_key = FALSE,
-jugador
)
#Genero un gráfico de barras
bar_plot <- ggplot(data_plot, aes(fill=jugador, y=value, x=variable)) +
geom_bar(position="dodge", stat="identity") + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
#Lo chequeo
bar_plot
#Le agrego interactividad
ggplotly(bar_plot)